package com.zp.self.module.level_4_算法练习.数据结构.String;
import org.junit.Test;

/**
 * @author By ZengPeng
 */
public class 力扣_1021_删除最外层的括号 {
    @Test
    public void main() {
        
        Solution solution = new 力扣_1021_删除最外层的括号().new Solution();
        System.out.println(solution);
    }

    /**
     题目：有效括号字符串为空 ""、"(" + A + ")" 或 A + B ，其中 A 和 B 都是有效的括号字符串，+ 代表字符串的连接。
         例如，""，"()"，"(())()" 和 "(()(()))" 都是有效的括号字符串。
         如果有效字符串 s 非空，且不存在将其拆分为 s = A + B 的方法，我们称其为原语（primitive），其中 A 和 B 都是非空有效括号字符串。
         给出一个非空有效字符串 s，考虑将其进行原语化分解，使得：s = P_1 + P_2 + ... + P_k，其中 P_i 是有效括号字符串原语。
         对 s 进行原语化分解，删除分解中每个原语字符串的最外层括号，返回 s 。

         示例 1：
         输入：s = "(()())(())"
         输出："()()()"
         解释：
         输入字符串为 "(()())(())"，原语化分解得到 "(()())" + "(())"，
         删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。

         示例 2：
         输入：s = "(()())(())(()(()))"
         输出："()()()()(())"
         解释：
         输入字符串为 "(()())(())(()(()))"，原语化分解得到 "(()())" + "(())" + "(()(()))"，
         删除每个部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。

         示例 3：
         输入：s = "()()"
         输出：""
         解释：
         输入字符串为 "()()"，原语化分解得到 "()" + "()"，
         删除每个部分中的最外层括号后得到 "" + "" = ""。

     分析：【P 💖💖】
        1.遍历：记录左右括号的个数，当相等时，剥离外层括号
            --执行耗时:2 ms,击败了99.21% 的Java用户
            --编码耗时:[6:27]

     边界值 & 注意点：
        1.
     **/
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String removeOuterParentheses(String s) {
        int left=1,right=0,start=0;
        StringBuilder sb = new StringBuilder();
        char[] chars = s.toCharArray();
        for (int index = 1; index < chars.length; index++) {
           if(chars[index]=='(')
               left++;
           else
               right++;
           if(left==right){
               sb.append(s, start+1, index);
               start= index+1;
           }
        }
        return sb.toString();
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}